package com.molichuxing.services.infrastructure.dao;

import com.molichuxing.framework.dao.RootMapper;
import com.molichuxing.framework.dto.TabDto;
import com.molichuxing.services.infrastructure.bean.PaymentBean;
import org.apache.ibatis.annotations.Param;

import java.util.List;
import java.util.Map;

public interface PaymentMapper extends RootMapper<PaymentBean> {

    PaymentBean getSimpleById(Integer id);

    /**
     * 根据条件分页查询
     *
     * @param params
     * @param pageNum
     * @param pageSize
     * @return
     */
    List<PaymentBean> getPage(@Param("params") Map<String, Object> params, @Param("pageNum") int pageNum,
                              @Param("pageSize") int pageSize);

    /**
     * 根据条件分页查询count
     *
     * @param params
     * @return
     */
    long getPageCount(@Param("params") Map<String, Object> params);


    /**
     * 根据订单号，支付状态，支付类型查询支付信息
     *
     * @param orderCode
     * @param payStatus
     * @param payType
     * @return
     */
    List<PaymentBean> getListByOrderCode(@Param("orderCode") Long orderCode, @Param("payStatus") Integer payStatus,
                                         @Param("payType") Integer payType);

    /**
     * 根据用户查询支付信息
     *
     * @param userId    用户id
     * @param payStatus 支付状态
     * @return
     */
    List<PaymentBean> getPaymentByUser(@Param("userId") Integer userId, @Param("payStatus") Integer payStatus);

    /**
     * 查询支付单信息
     *
     * @param orderCode  订单号
     * @param scheduleId 排期id
     * @return
     */
    List<PaymentBean> getPaymentByOrder(@Param("orderCode") Long orderCode, @Param("scheduleId") Integer scheduleId);

    /**
     * 修改支付单
     *
     * @param paymentBean
     * @return
     */
    int modify(PaymentBean paymentBean);

    /**
     * 查询支付单信息
     *
     * @param payNumber 付款流水号
     * @return
     */
    PaymentBean getPaymentByPayNumber(@Param("payNumber") String payNumber);

    /**
     * 支付成功修改支付单信息
     *
     * @param paymentBean
     * @return
     */
    int modifyPaySuccess(PaymentBean paymentBean);

    /**
     * 查询支付单信息
     *
     * @param orderCode  订单号
     * @param scheduleId 排期id
     * @param costType   费用类型
     * @return
     */
    PaymentBean getPaymentByOrderAndCostType(@Param("orderCode") Long orderCode,
                                             @Param("scheduleId") Integer scheduleId, @Param("costType") Integer costType);

    /**
     * 根据业务类型获取数量
     *
     * @return
     */
    List<TabDto> getPaymentCountByBusinessType();

    /**
     * 查询支付信息
     *
     * @param selectParams
     * @return
     */
    List<PaymentBean> getPaymentList(@Param("params") Map<String, Object> selectParams);

    /**
     * 查询支付成功信息条数
     *
     * @param selectParams
     * @return
     */
    Long getPaymentListCount(@Param("params") Map<String, Object> selectParams);

    /**
     * 查询支付成功信息
     *
     * @param orderCode
     * @param costType
     * @param payStatus
     * @return
     */
    List<PaymentBean> getSuccessPaymentByOrderCode(@Param("orderCode") long orderCode,
                                                   @Param("costType") Integer costType,
                                                   @Param("payStatus") int payStatus);

    /**
     * 线下支付修改支付信息
     *
     * @param toPaymentBean
     * @return
     */
    int modifyOffline(@Param("bean") PaymentBean toPaymentBean);
}